import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Search {
    public static void main(String[] args) throws IOException {
        // 1. 用户输入要扫描的目录路径
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入要查找的文件的目录的路径: ");
        String searchPath = sc.nextLine();
        File file = new File(searchPath);
        // 2. 判断是否存在目录
        if(!file.isDirectory()) {
            System.out.println("输入的目录路径错误!程序结束!");
            return;
        }
        // 3. 用户输入要查找的内容
        System.out.print("请输入你要查找的内容: ");
        String str = sc.nextLine();
        List<File> result = new ArrayList<>();
        // 4. 用递归的方式遍历 符合的存入result
        scanResult(file,str,result);

        // 5. 遍历结果
        System.out.println("找到了"+result.size()+"个符合条件的内容");
        for(File file1 : result){
            System.out.println(file1.getCanonicalFile());
        }
    }
    public static void scanResult (File file,String str,List<File> result) throws IOException {
        // files里都是目录
        File[] files = file.listFiles();
        // files为空或者长度为0就是没有内容 直接返回
        if(files == null || files.length == 0){
            return;
        }
        // 遍历
        for(File f : files){
            // 是目录就递归
            if(f.isDirectory()){
                scanResult(f,str,result);
            }else{
                // 不是目录就判断是否准则符合要求的内容
                if(isContains(f,str)){
                    result.add(f);
                }
            }
        }
    }
    public static boolean isContains(File f,String s) throws IOException{
        StringBuilder sb = new StringBuilder();
        try(InputStream inputStream = new FileInputStream(f)){
            try(Scanner sc = new Scanner(inputStream,"UTF-8")){
                // 读取数据
                // 每一行的读
                // 并添加到sb中
                while (sc.hasNextLine()){
                    String str = sc.nextLine();
                    sb.append(str+"/n");
                }
            }
        }
        // 如果和-1相等就是没有要找的内容
        return sb.indexOf(s) == -1;
    }
}
